package com.moarea.app.service.inter;

import com.moarea.app.lang.model.ResultObject;
import com.sun.istack.internal.Nullable;

import java.util.Map;

/**
 * 基础性接口
 * <p>
 * 定义一些基础方法：例如安全性校验方法等
 * <p>
 * jizhong
 * <p>
 * 2017-09-13
 */
public interface IBaseService {

    /**
     * 检查传入参数的数据完整性
     * 主要是是否包含了时间戳 + 密文
     * 其他的业务参数可以在实现的时候进行检查
     * <p>
     * jizhong
     * <p>
     * 2017-09-13
     *
     * @param param 接口传入参数
     * @return 结果
     */
    ResultObject checkDataIntegrity(Map<String, Object> param);


    /**
     * 安全性校验，用时间戳+MD5秘钥进行加密对比
     * <p>
     * jizhong
     * <p>
     * 2017-09-13
     *
     * @param timeStamp  时间戳
     * @param cipherText 密文
     * @return 是否通过验证
     */
    boolean checkAuthentication(String timeStamp, String cipherText);


    /**
     * 业务处理前的基础数据校验方法
     * <p>
     * jizhong
     * <p>
     * 2017-09-20
     *
     * @param param  参数
     *               TIME_STAMP 时间戳
     *               CIPHER_TEXT 密文
     * @param extras 额外需检查参数
     * @return 结果
     */
    ResultObject validateCallParam(Map<String, Object> param, @Nullable Map<String, Object> extras);

    /**
     * 重置Logger使用的对象
     *
     * @param clazz Class
     */
    void setLogger(Class clazz);


    /**
     * 针对MUI APP的参数完整性校验
     * <p>
     * 检查传入参数的数据完整性
     * 主要是是否包含了MD5_KEY
     * 其他的业务参数可以在实现的时候进行检查
     * <p>
     * jizhong
     * <p>
     * 2017-10-16
     *
     * @param param 接口传入参数
     * @return 结果
     */
    ResultObject checkDataIntegrityForMui(Map<String, Object> param);


    /**
     * 针对MUI APP的参数完整性校验
     * <p>
     * 业务处理前的基础数据校验方法
     * <p>
     * jizhong
     * <p>
     * 2017-09-20
     *
     * @param param  参数
     *               MD5_KEY
     * @param extras 额外需检查参数
     * @return 结果
     */
    ResultObject validCallParamForMui(Map<String, Object> param, @Nullable Map<String, Object> extras);


    /**
     * 验证额外参数完整性
     *
     * @param extras 额外的参数
     * @param param  前端传如此参数
     * @return 解析结果
     */
    ResultObject checkExtraParamCompleteness(Map<String, Object> param, Map<String, Object> extras);


}

